package com.daily.daily_push.vo;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Data
public class WxCpMessage implements Serializable {
    private static final long serialVersionUID = -2082278303886631708L;
    /**
     * 成员ID列表（消息接收者，多个接收者用‘|’分隔，最多支持1000个）。特殊情况：指定为@all，则向关注该企业应用的全部成员发送
     */
    private String toUser;
    /**
     * 部门ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
     */
    private String toParty;
    /**
     * 标签ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
     */
    private String toTag;
    /**
     * 消息类型，此时固定为：news(图文消息)   markdown
     */
    private String msgType;
    /**
     * 	企业应用的id，整型。企业内部开发，可在应用的设置页面查看；第三方服务商，可通过接口 获取企业授权信息 获取该参数值
     */
    private Integer agentId;
    /**
     * 图文消息
     */
    private List<NewArticle> articles = new ArrayList();

    /**
     * markdown内容
     */
    private String content;

    /**
     * 表示是否开启id转译，0表示否，1表示是，默认0
     */
    private Boolean enableIdTrans = false;

    /**
     * 表示是否开启重复消息检查，0表示否，1表示是，默认0
     */
    private Boolean enableDuplicateCheck = false;

    /**
     * 	表示是否重复消息检查的时间间隔，默认1800s，最大不超过4小时
     */
    private Integer duplicateCheckInterval;


        public String toJson() {
        JsonObject messageJson = new JsonObject();
        if (this.getAgentId() != null) {
            messageJson.addProperty("agentid", this.getAgentId());
        }

        if (StringUtils.isNotBlank(this.getToUser())) {
            messageJson.addProperty("touser", this.getToUser());
        }

        messageJson.addProperty("msgtype", this.getMsgType());
        if (StringUtils.isNotBlank(this.getToParty())) {
            messageJson.addProperty("toparty", this.getToParty());
        }

        if (StringUtils.isNotBlank(this.getToTag())) {
            messageJson.addProperty("totag", this.getToTag());
        }

        if (this.getEnableIdTrans()) {
            messageJson.addProperty("enable_id_trans", 1);
        }

        if (this.getEnableDuplicateCheck()) {
            messageJson.addProperty("enable_duplicate_check", 1);
        }

        if (this.getDuplicateCheckInterval() != null) {
            messageJson.addProperty("duplicate_check_interval", this.getDuplicateCheckInterval());
        }

        this.handleMsgType(messageJson);
        return messageJson.toString();
    }

    private void handleMsgType(JsonObject messageJson) {
        JsonObject newsJsonObject;
        JsonArray articleJsonArray;
        Iterator var6;
        JsonObject articleJson;
        switch (this.getMsgType()) {
            case "markdown":
                newsJsonObject = new JsonObject();
                newsJsonObject.addProperty("content", this.getContent());
                messageJson.add("markdown", newsJsonObject);
                break;

            case "news":
                newsJsonObject = new JsonObject();
                articleJsonArray = new JsonArray();
                var6 = this.getArticles().iterator();

                while(var6.hasNext()) {
                    NewArticle article = (NewArticle)var6.next();
                    articleJson = new JsonObject();
                    articleJson.addProperty("title", article.getTitle());
                    articleJson.addProperty("description", article.getDescription());
                    articleJson.addProperty("url", article.getUrl());
                    articleJson.addProperty("picurl", article.getPicUrl());
                    articleJsonArray.add(articleJson);
                }
                newsJsonObject.add("articles", articleJsonArray);
                messageJson.add("news", newsJsonObject);
                break;

        }

    }


}
